"""
生成器 是一个用于创建迭代器的简单而强大的工具。
它们的写法类似于标准的函数，但当它们要返回数据时会使用 yield 语句。
每次在生成器上调用 next() 时，它会从上次离开的位置恢复执行（它会记住上次执行语句时的所有数据值）。
在 Django 源码中，yield 关键字常用于实现生成器（Generator）模式，这在处理大型数据集、实现迭代器协议或优化内存使用时非常常见。
"""


def reverse(data):
    for index in range(len(data) - 1, -1, -1):
        yield data[index]


for char in reverse('golf'):
    pass
    # print(char)

a = [1, 2, 3, 4]
# print(a[1:1])

squares_gen = (x ** 2 for x in range(10))
print(next(squares_gen))
print(squares_gen)
for i in range(10):
    print(i)
print(next(squares_gen))


def demo(list_num):
    for num in list_num:
        yield from num


if __name__ == '__main__':
    list_num1 = ["1", "2", "3", "4"]
    # print('--', demo(list_num1))
    gen = demo(list_num1)
    print('--', next(gen))
    print('--', next(gen))
    print('--', next(gen))
    print('--', next(gen))
